package com.heima.news.service.impl;

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;

import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.heima.news.domain.NewsType;
import com.heima.news.mapper.NewsTypeMapper;
import com.heima.news.service.INewsTypeService;
import com.ruoyi.common.core.utils.StringUtils;
import org.springframework.stereotype.Service;

import java.util.List;

@Service
public class INewsTypeServiceImpl extends ServiceImpl<NewsTypeMapper, NewsType> implements INewsTypeService {
    /**
     * 查询新闻类型
     *
     * @param typeId 新闻类型主键
     * @return 新闻类型
     */
    @Override
    public NewsType selectNewsTypeByTypeId(Integer typeId) {
        return lambdaQuery().eq(NewsType::getTypeId, typeId).one();
    }


    /**
     * 新增新闻类型
     *
     * @param newsType 新闻类型
     * @return 结果
     */
    @Override
    public int insertNewsType(NewsType newsType) {
        boolean isSuccess = save(newsType);
        if (!isSuccess) {
            return 0;
        }
        return 1;
    }

    /**
     * 修改新闻类型
     *
     * @param newsType 新闻类型
     * @return 结果
     */
    @Override
    public int updateNewsType(NewsType newsType) {
        boolean isSuccess = lambdaUpdate().eq(NewsType::getTypeId, newsType.getTypeId())
                .set(StringUtils.isNotEmpty(newsType.getTypeName()), NewsType::getTypeName, newsType.getTypeName())
                .set(newsType.getParentId() != null, NewsType::getParentId, newsType.getParentId())
                .set(StringUtils.isNotEmpty(newsType.getRemark()), NewsType::getRemark, newsType.getRemark())
                .update();
        if (!isSuccess) {
            return 0;
        }
        return 1;
    }

    /**
     * 批量删除新闻类型
     *
     * @param typeIds 需要删除的新闻类型主键集合
     * @return 结果
     */
    @Override
public int deleteNewsTypeByTypeIds(List<Integer> typeIds) {
    boolean isSuccess = removeBatchByIds(typeIds);
    return isSuccess ? typeIds.size() : 0;
}


    /**
     * 删除新闻类型信息
     *
     * @param typeId 新闻类型主键
     * @return 结果
     */

    /**
     * 查询新闻类型列表
     *
     * @param newsType 新闻类型
     * @return 列表
     */
    @Override
    public List<NewsType> selectNewsTypeTableList(NewsType newsType) {
        List<NewsType> newsTypeList = lambdaQuery().eq(newsType.getTypeId() != null, NewsType::getParentId, newsType.getParentId())
                .like(StringUtils.isNotEmpty(newsType.getTypeName()), NewsType::getTypeName, newsType.getTypeName())
                .eq(newsType.getTypeId() != null, NewsType::getTypeId, newsType.getTypeId()).list();
        return newsTypeList;
    }

    @Override
    public List<NewsType> getAll() {
        return list();
    }

    /**
     * 查询新闻类型列表
     *
     * @param pageNum
     * @param pageSize
     * @return 新闻类型集合
     */
    @Override
    public List<NewsType> selectNewsTypeList(Integer pageNum, Integer pageSize) {
        Page pageResult = lambdaQuery().page(new Page(pageNum, pageSize));
        List<NewsType> list = (List<NewsType>) pageResult.getRecords();
        return list;
    }

}
